package com.yxw.yxnet_cd_center.customer_service.controller;

import com.yxw.yxnet_cd_center.common.utils.BaseResult;
import com.yxw.yxnet_cd_center.customer_service.dto.DeptDTO;
import com.yxw.yxnet_cd_center.customer_service.dto.DeptQueryDTO;
import com.yxw.yxnet_cd_center.customer_service.dto.SubsDTO;
import com.yxw.yxnet_cd_center.customer_service.service.IDeptService;
import com.yxw.yxnet_cd_center.customer_service.vo.DeptVO;
import com.yxw.yxnet_cd_center.customer_service.vo.UserEmpVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * 部门管理Controller控制层处理
 *
 * @author xiexuxin
 * @date 2023-09-14
 */

@Slf4j
@Api(value = "部门管理", tags = "部门管理")
@RestController
@Validated
@RequestMapping("/v1/dept")
public class DeptController {

    @Autowired
    private IDeptService deptService;

    /**
     * 新增部门
     */
    @ApiOperation("添加部门")
    @PostMapping("add-dept")
    public BaseResult addDept(@RequestBody DeptDTO deptDTO) {
        log.info("开始处理【添加部门】的请求，参数：{}", deptDTO);
        deptService.addNewDept(deptDTO);
        return BaseResult.success();
    }

    /**
     * 新增部门
     */
    @ApiOperation("添加子部门")
    @PostMapping("add-subs")
    public BaseResult addSubs(@RequestBody SubsDTO subsDTO) {
        log.info("开始处理【添加子部门】的请求，参数：{}", subsDTO);
        deptService.addNewSubdivision(subsDTO);
        return BaseResult.success();
    }

    /**
     * 批量删除部门
     */
    @ApiOperation("根据id批量删除部门")
    @PostMapping("/{deptIds}/batch-delete")
    public BaseResult batchDelete(@PathVariable List<Long> deptIds) {
        log.info("开始处理【根据id批量删除部门】的请求，参数：{}", deptIds);
        deptService.deleteByDeptIds(deptIds);
        return BaseResult.success();
    }

    /**
     * 修改部门
     */
    @ApiOperation("根据id修改部门")
    @PostMapping("{deptId}/update")
    public BaseResult edit(@PathVariable Long deptId, @RequestBody DeptDTO deptDTO) {
        log.info("开始处理【根据id修改部门】的请求，ID：{}，新数据：{}", deptId,deptDTO);
        deptService.updateInfoById(deptId,deptDTO);
        return BaseResult.success();
    }

    /**
     * 修改子部门
     *
     */
    @ApiOperation("根据id修改子部门")
    @PostMapping("{deptId}/updateSubs")
    public BaseResult editSubs(@PathVariable Long deptId, @RequestBody SubsDTO subsDTO) {
        log.info("开始处理【根据id修改部门】的请求，ID：{}，新数据：{}", deptId,subsDTO);
        deptService.updateSubsById(deptId,subsDTO);
        return BaseResult.success();
    }

    /**
     * 获取部门详细信息
     */
    @ApiOperation(value = "根据id查询部门信息")
    @GetMapping(value = "/{deptId}")
    public BaseResult getInfo(@PathVariable("deptId") Long deptId) {
        log.info("开始处理【根据id查询部门信息】的请求，ID：{}", deptId);
        DeptVO deptVO = deptService.selectByDeptId(deptId);
        return BaseResult.success(deptVO);
    }

    /**
     * 查询部门列表
     */
    @ApiOperation(value = "查询部门列表")
    @GetMapping("/deptList")
    public BaseResult deptList() {
        log.info("开始处理【查询部门列表】请求，无参数");
        List<DeptVO> list = deptService.deptList();
        return BaseResult.success(list);
    }

    /**
     * 获取部门下拉树列表
     */
    @PostMapping("/deptTreeSelect")
    @ApiOperation(value = "获取部门下拉树列表")
    public BaseResult deptTreeSelect() {
        List<DeptVO> deptVOList = deptService.deptList();
        return BaseResult.success(deptService.buildDeptTreeList(deptVOList));
    }

    /**
     *根据条件返回部门树
     */
    @ApiOperation(value = "根据条件返回部门树")
    @PostMapping(value = "/getDeptTree")
    public BaseResult getDeptTree(@RequestBody DeptQueryDTO deptQueryDTO) {
        log.info("开始处理【条件查询部门】请求，参数: {}", deptQueryDTO);
        List<DeptVO> getDeptList=deptService.getDeptList(deptQueryDTO);
        return BaseResult.success(deptService.getDeptTree(getDeptList));
    }

    /**
     * 根据部门id查询所属的员工
     */
    @PostMapping("/getEmpByDept")
    @ApiOperation(value = "根据部门id查询所属的员工")
    public BaseResult getEmpByDept(@RequestParam("deptIds") List<Long> deptIds) {
        List<UserEmpVO> empByDept = deptService.getEmpByDept(deptIds);
        return BaseResult.success(empByDept);
    }
}
